package la.iok.hzsvn.lewin.movie.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.entity.ClueCardGroup;
import la.iok.hzsvn.lewin.movie.model.ClueCardGroupParam;
import la.iok.hzsvn.lewin.movie.model.ClueCardGroupVo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.NotNullElement;
import la.iok.hzsvn.share.annotations.Nullable;

import java.util.List;

public interface ClueCardGroupService extends BaseService<ClueCardGroup,Long> {
    /**
     * 保存分组
     * @param token 操作用户
     * @param movieId 剧本id
     * @param param 分组参数
     * @return 新增分组id
     */
    @NotNull
    Long save(@NotNull Token token, @NotNull Long movieId, @NotNull ClueCardGroupParam param);

    /**
     * 更新分组
     * @param token 操作用户
     * @param id 分组id
     * @param param 分组参数
     */
    void update(@NotNull Token token, @NotNull Long id, @NotNull ClueCardGroupParam param);

    /**
     * 删除分组
     * @param token 操作用户
     * @param id 分组id
     */
    void delete(@NotNull Token token, @NotNull Long id);

    /**
     * 获取剧本所有线索分组
     * @param token 操作用户
     * @param movieId 剧本id
     * @return 线索分组列表
     */
    @NotNull
    @NotNullElement
    List<ClueCardGroupVo> clueCardGroups(@NotNull Token token,@NotNull Long movieId);

    /**
     * 查询剧本的线索分组
     * @param movieId 剧本id
     * @return 线索分组列表
     */
    @NotNull
    @NotNullElement
    List<ClueCardGroup> clueCardGroups(@Nullable Long movieId);
}
